{
 "cells": [
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "1fbbed12",
   "metadata": {
    "papermill": {
     "duration": 6.376506,
     "end_time": "2024-06-26T15:44:53.469218",
     "exception": false,
     "start_time": "2024-06-26T15:44:47.092712",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "import os\n",
    "import numpy as np \n",
    "import pandas as pd \n",
    "import torch\n",
    "import torchvision\n",
    "from torch.autograd import Variable\n",
    "from torch import nn\n",
    "from torch.utils.data import DataLoader\n",
    "\n",
    "from torchvision.datasets import MNIST\n",
    "from torchvision import transforms as tfs\n",
    "from torchvision.utils import save_image"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "e47e4750",
   "metadata": {
    "papermill": {
     "duration": 5.366837,
     "end_time": "2024-06-26T15:44:58.840746",
     "exception": false,
     "start_time": "2024-06-26T15:44:53.473909",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "im_tfs = tfs.Compose([\n",
    "    tfs.ToTensor(),\n",
    "    tfs.Normalize((0.5, ), (0.5, ))\n",
    "#     tfs.Normalize([0.5, 0.5, 0.5], [0.5, 0.5, 0.5]) # 标准化\n",
    "])\n",
    "\n",
    "train_set = torchvision.datasets.MNIST(\n",
    "    root=\"./mnist\", train=True, download=True, transform=im_tfs\n",
    ")\n",
    "val_set = torchvision.datasets.MNIST(\n",
    "    root=\"./mnist\", train=False, download=True, transform=im_tfs\n",
    ")\n",
    "# train_set = MNIST('/kaggle/working/mnist', transform=im_tfs)\n",
    "train_data = DataLoader(train_set, batch_size=128, shuffle=True)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "ee7e09db",
   "metadata": {
    "papermill": {
     "duration": 0.022008,
     "end_time": "2024-06-26T15:44:58.870345",
     "exception": false,
     "start_time": "2024-06-26T15:44:58.848337",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "# 定义网络\n",
    "class autoencoder(nn.Module):\n",
    "    def __init__(self):\n",
    "        super(autoencoder, self).__init__()\n",
    "\n",
    "        self.encoder = nn.Sequential(\n",
    "            nn.Linear(28*28, 128),\n",
    "            nn.ReLU(True),\n",
    "            nn.Linear(128, 64),\n",
    "            nn.ReLU(True),\n",
    "            nn.Linear(64, 12),\n",
    "            nn.ReLU(True),\n",
    "            nn.Linear(12, 3) # 输出的 code 是 3 维，便于可视化\n",
    "        )\n",
    "\n",
    "        self.decoder = nn.Sequential(\n",
    "            nn.Linear(3, 12),\n",
    "            nn.ReLU(True),\n",
    "            nn.Linear(12, 64),\n",
    "            nn.ReLU(True),\n",
    "            nn.Linear(64, 128),\n",
    "            nn.ReLU(True),\n",
    "            nn.Linear(128, 28*28),\n",
    "            nn.Tanh()\n",
    "        )\n",
    "\n",
    "    def forward(self, x):\n",
    "        encode = self.encoder(x)\n",
    "        decode = self.decoder(encode)\n",
    "        return encode, decode"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "4a6920d9",
   "metadata": {
    "papermill": {
     "duration": 0.094274,
     "end_time": "2024-06-26T15:44:58.971948",
     "exception": false,
     "start_time": "2024-06-26T15:44:58.877674",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "torch.Size([1, 3])\n"
     ]
    }
   ],
   "source": [
    "net = autoencoder()\n",
    "x = Variable(torch.randn(1, 28*28)) # batch size 是 1\n",
    "code, _ = net(x)\n",
    "print(code.shape)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "id": "fe684685",
   "metadata": {
    "papermill": {
     "duration": 0.021208,
     "end_time": "2024-06-26T15:44:59.000901",
     "exception": false,
     "start_time": "2024-06-26T15:44:58.979693",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [],
   "source": [
    "criterion = nn.MSELoss(reduction='sum')\n",
    "optimizer = torch.optim.Adam(net.parameters(), lr=1e-3)\n",
    "\n",
    "def to_img(x):\n",
    "    '''\n",
    "    定义一个函数将最后的结果转换回图片\n",
    "    '''\n",
    "    x = 0.5 * (x + 1.)\n",
    "    x = x.clamp(0, 1)\n",
    "    x = x.view(x.shape[0], 1, 28, 28)\n",
    "    return x"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "2eb5c728",
   "metadata": {
    "papermill": {
     "duration": 1717.304684,
     "end_time": "2024-06-26T16:13:36.313208",
     "exception": false,
     "start_time": "2024-06-26T15:44:59.008524",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "epoch: 20, Loss: 109.8478\n",
      "epoch: 40, Loss: 99.7517\n",
      "epoch: 60, Loss: 98.0239\n",
      "epoch: 80, Loss: 88.8321\n",
      "epoch: 100, Loss: 82.8358\n"
     ]
    }
   ],
   "source": [
    "# 开始训练自动编码器\n",
    "for e in range(100):\n",
    "    for im, _ in train_data:\n",
    "        im = im.view(im.shape[0], -1)\n",
    "        im = Variable(im)\n",
    "        # 前向传播\n",
    "        _, output = net(im)\n",
    "        loss = criterion(output, im) / im.shape[0] # 平均\n",
    "        # 反向传播\n",
    "        optimizer.zero_grad()\n",
    "        loss.backward()\n",
    "        optimizer.step()\n",
    "\n",
    "    if (e+1) % 20 == 0: # 每 20 次，将生成的图片保存一下\n",
    "        print('epoch: {}, Loss: {:.4f}'.format(e + 1, loss.item()))\n",
    "        pic = to_img(output.cpu().data)\n",
    "        if not os.path.exists('./simple_autoencoder'):\n",
    "            os.mkdir('./simple_autoencoder')\n",
    "        save_image(pic, './simple_autoencoder/image_mlp_{}.png'.format(e + 1))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "id": "849f1da5",
   "metadata": {
    "papermill": {
     "duration": 0.262702,
     "end_time": "2024-06-26T16:13:36.584125",
     "exception": false,
     "start_time": "2024-06-26T16:13:36.321423",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "image/png": "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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "from matplotlib import cm\n",
    "from mpl_toolkits.mplot3d import Axes3D\n",
    "%matplotlib inline\n",
    "\n",
    "# 可视化结果\n",
    "view_data = Variable((train_set.data[:200].type(torch.FloatTensor).view(-1, 28*28) / 255. - 0.5) / 0.5)\n",
    "encode, _ = net(view_data)    # 提取压缩的特征值\n",
    "fig = plt.figure(2)\n",
    "# ax = Axes3D(fig)    # 3D 图\n",
    "ax = fig.add_subplot(projection='3d')\n",
    "# x, y, z 的数据值\n",
    "X = encode.data[:, 0].numpy()\n",
    "Y = encode.data[:, 1].numpy()\n",
    "Z = encode.data[:, 2].numpy()\n",
    "values = train_set.targets[:200].numpy()  # 标签值\n",
    "for x, y, z, s in zip(X, Y, Z, values):\n",
    "    c = cm.rainbow(int(255*s/9))    # 上色\n",
    "    ax.text(x, y, z, s, backgroundcolor=c)  # 标位子\n",
    "ax.set_xlim(X.min(), X.max())\n",
    "ax.set_ylim(Y.min(), Y.max())\n",
    "ax.set_zlim(Z.min(), Z.max())\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "id": "cfdce71e",
   "metadata": {
    "papermill": {
     "duration": 0.339129,
     "end_time": "2024-06-26T16:13:36.931475",
     "exception": false,
     "start_time": "2024-06-26T16:13:36.592346",
     "status": "completed"
    },
    "tags": []
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.image.AxesImage at 0x238f3d6aa60>"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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enp63AYA6P+6vYCOHDmi48ePKy8vr7sfCgDQh3j/Cq65uTnuaqampkb79+9XZmamMjMz9cQTT2jhwoXKzc1VdXW1Hn74YY0bN05z585N6OAAgL7Nu4D27t2rG264oevr/zx/s3jxYj333HM6cOCA/vCHP+jEiRPKz8/XnDlz9LOf/UzhcDhxUwMA+jzvApo1a5accxe8/29/+9tXGqgvCLKwaCQS8c4MHjzYO5ORkdEjGUkqKCjwznzRuXMh1dXV3pmqqirvjCSdOHHCOxNk0djMzEzvzJIlS7wzkydP9s5ICvRcbG1trXdmy5Yt3pkgb2xvbGz0zkjSmTNnAuXw5bAWHADABAUEADBBAQEATFBAAAATFBAAwAQFBAAwQQEBAExQQAAAExQQAMAEBQQAMEEBAQBMUEAAABMUEADARMI/kvtSMGCA/2HLzs72zkydOtU7U1hY6J05deqUd0aSOjo6vDMff/yxd+a9997zzhw/ftw7I0njx4/3zowePdo7U1RU5J0JMluQldulYH+3f/zjH70zf/nLX7wzx44d8850dnZ6Z9D9uAICAJiggAAAJiggAIAJCggAYIICAgCYoIAAACYoIACACQoIAGCCAgIAmKCAAAAmKCAAgAkKCABggsVIA0hJSfHO5OXleWeuvvpq78wVV1zhnamrq/POSFJzc7N35siRI96ZIUOGeGdmzpzpnZGka665xjsTZL6MjAzvTHt7e49kJGnjxo3emYqKCu9MU1OTd4aFRfsProAAACYoIACACQoIAGCCAgIAmKCAAAAmKCAAgAkKCABgggICAJiggAAAJiggAIAJCggAYIICAgCYYDHSANLT070zY8aM8c7MmDHDO1NQUOCdCTKbJJ06dco7E2QhyeTkZO9MkMU+JWno0KHemVgs5p1paWnxztTX13tnfvvb33pnJOnDDz/0znz66afemdOnT3tn0H9wBQQAMEEBAQBMUEAAABMUEADABAUEADBBAQEATFBAAAATFBAAwAQFBAAwQQEBAExQQAAAExQQAMAEi5EGcObMGe/MpEmTvDNZWVnemSCLaaampnpnggqHw96Ztra2HnkcSero6PDOBFm48+c//7l35oMPPvDOBFkoVeq5RWNxaeMKCABgggICAJjwKqCysjJde+21SktLU3Z2thYsWKCqqqq4fVpbW1VaWqphw4Zp6NCh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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "code = Variable(torch.FloatTensor([[1.19, -3.36, 2.06]])) # 给一个 code 是 (1.19, -3.36, 2.06)\n",
    "decode = net.decoder(code)\n",
    "decode_img = to_img(decode).squeeze()\n",
    "decode_img = decode_img.data.numpy() * 255\n",
    "plt.imshow(decode_img.astype('uint8'), cmap='gray') # 生成图片 3"
   ]
  }
 ],
 "metadata": {
  "kaggle": {
   "accelerator": "none",
   "dataSources": [],
   "dockerImageVersionId": 30733,
   "isGpuEnabled": false,
   "isInternetEnabled": true,
   "language": "python",
   "sourceType": "notebook"
  },
  "kernelspec": {
   "display_name": "kan",
   "language": "python",
   "name": "kan"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.7"
  },
  "papermill": {
   "default_parameters": {},
   "duration": 1735.39999,
   "end_time": "2024-06-26T16:13:38.269529",
   "environment_variables": {},
   "exception": null,
   "input_path": "__notebook__.ipynb",
   "output_path": "__notebook__.ipynb",
   "parameters": {},
   "start_time": "2024-06-26T15:44:42.869539",
   "version": "2.5.0"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
